/* !FormText.main.c */

#include <stdlib.h>

#include "event.h"

#include "err.h"
#include "msgtrans.h"
#include "settings.h"
#include "tbchunks.h"
#include "textfile.h"

#define Wimp_Version 310

int interesting_messages[] = {
  Wimp_MDataLoad,
  Wimp_MDataSave,
  Wimp_MDataLoadAck,
  Wimp_MDataSaveAck,
  Wimp_MRAMFetch,
  Wimp_MRAMTransmit,
  Wimp_MQuit
};

/* Usually want to receive too many Toolbox events to list */
int interesting_toolbox[] = {0};

void initialise_task()
{
  static IdBlock id_block;
  EF(toolbox_initialise(0,
  	Wimp_Version,
  	interesting_messages,
  	interesting_toolbox,
  	"<FormText$Dir>",
  	msgs_get_descriptor(),
  	&id_block,
  	0,
  	0,
  	0));	/* Last 3 zeroes mean don't return values;
  	           Acorn's examples do this so it must be safe */
  event_set_mask(Wimp_Poll_NullMask |
  	Wimp_Poll_PointerLeavingWindowMask |
  	Wimp_Poll_PointerEnteringWindowMask |
  	Wimp_Poll_KeyPressedMask |	/* Dealt with by Toolbox */
  	Wimp_Poll_LoseCaretMask |
  	Wimp_Poll_GainCaretMask);
  event_initialise(&id_block);
  err_set_taskname(msgs_lookup("_TaskName"));
}

/* Handlers for misc events */
#define Menu_Quit_Event TBC_Menu

/* Unused arguments might as well have meaningless names */
int message_quit_handler(WimpMessage *m, void *h)
{
  exit(0);
  return 1;
}

int menu_quit_handler(int c, ToolboxEvent *e, IdBlock *i, void *h)
{
  exit(0);
  return 1;
}

int toolbox_error_handler(int c, ToolboxEvent *event, IdBlock *i, void *h)
{
  /* Error block immediately follows event header, but needs casting */
  err_check((_kernel_oserror *) &(&event->hdr)[1]);
  return 1;
}

int main()
{
  initialise_task();
  event_register_message_handler(Wimp_MQuit, message_quit_handler, 0);
  event_register_toolbox_handler(-1, Menu_Quit_Event, menu_quit_handler, 0);
  event_register_toolbox_handler(-1, Toolbox_Error, toolbox_error_handler, 0);
  textfile_initialise();
  settings_initialise();
  for (;;)
  {
    int event_code;
    WimpPollBlock event_block;
    E(event_poll(&event_code, &event_block, 0));
  }
}
